/*******************************************************
> Copyright (C) 2024 ==IOT== All rights reserved.
> File Name: array.h
> Author: IOT
> Website:www.slq.org
> Created Time: 2024年10月22日 星期二 15时55分48秒
***************************************************/

#ifndef __ARRAY_H_
#define __ARRAY_H_

#include <iostream>
#include <istream>
#include <ostream>

//using namespace std;
using std::cin;
using std::cout;
using std::endl;
using std::ostream;
using std::string;

namespace slq {
class Array
{
	enum order {ASC, DESC};
	int *ptr = nullptr;
	int elements;

	public:
		Array(int n) : elements(n)
		{
			ptr = new int[n];
		}
		~Array()
		{
			cout << "析构" << endl;
			delete [] ptr;
		}
		
		int& operator[](int index); 	// 重载[]，实现数组元素访问
		inline int size() 					// 返回数组元素个数
		{
			return elements;
		}
		void fill(int val); 				// 填充数组内所有的的元素为指定值
		int& at(int index);
		int front(); 					// 返回第一个元素的值
		int back();  					// 返回最后一个元素的值
		void swap(Array &arr); 					// 交换两个数组的所有元素(同类型，同大小)
		
		void sort(order od = ASC); 		// 排序
		// 友元重载
		friend ostream& operator<<(ostream& out, Array& obj);
               //ostream& operator<<(ostream& out, Array& obj)
			/*
		{
			//cout << "elements:" << obj.size();
			out << "raw: ";
			//out.setwidth(5);
			int i = 0;
			for (;i < obj.size() - 1; i++) {
				out << obj[i] << ",";
			}
			out << obj[i] << endl;
			return out;

		}
		*/
};

ostream& operator<<(ostream& out, Array& obj);

}

using slq::Array;

#endif

